
<!DOCTYPE HTML>
<html lang="zh-hans" >
    <head>
        <meta charset="UTF-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <title>spring-data-mybatis-mini极简ORM · 小白鼠V技术驿站</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="description" content="">
        <meta name="baidu-site-verification" content="cAxqlT3C5k">
        <meta name="author" content="vonchange">
        
        
    
    
    <link rel="stylesheet" href="../gitbook/style.css">

    
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-pageview-count/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-search-plus/search.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-expandable-chapters-small/expandable-chapters-small.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-anchor-navigation-ex/style/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-code/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-advanced-emoji/emoji-website.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-tbfed-pagefooter/footer.css">
                
            
                
                <link rel="stylesheet" href="/myfile/gitalk/dist/gitalk.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-donate/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-fontsettings/website.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-theme-comscore/test.css">
                
            
        

    

    
        
    
        
    
        
    
        
    
        
    
        
    


    

        
    
    
    
    
    
    
    <meta name="HandheldFriendly" content="true"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="../gitbook/images/apple-touch-icon-precomposed-152.png">
    <link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">

    
    <link rel="next" href="host.html" />
    
    
    <link rel="prev" href="../" />
    

    <link href="http://www.vonchange.com/rss" title="小白鼠V技术驿站" rel="alternate" type="application/rss+xml" />

    <style>
    @media only screen and (max-width: 640px) {
        .book-header .hidden-mobile {
            display: none;
        }
    }
    </style>
    <script>
        window["gitbook-plugin-github-buttons"] = {"buttons":[{"user":"vonchange","repo":"vonchange.github.io","type":"star","size":"small"}]};
    </script>

    
        <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    
    
    
    
        <link rel="apple-touch-icon-precomposed" sizes="152x152" href="/apple-touch-icon-precomposed-152.png">
    
    
        
    
    
        
    

    
    <link rel="stylesheet" href="../gitbook/gitbook-plugin-chart/c3/c3.min.css">
    <script src="../gitbook/gitbook-plugin-chart/c3/d3.min.js"></script>
    <script src="../gitbook/gitbook-plugin-chart/c3/c3.min.js"></script>
    

    </head>
    <body>
        
<div class="book">
    <div class="book-summary">
        
            
<div id="book-search-input" role="search">
    <input type="text" placeholder="输入并搜索" />
</div>

            
                <nav role="navigation">
                


<ul class="summary">
    
    
    
        
        <li>
            <a href="http://www.vonchange.com/" target="_blank" class="custom-link">小白鼠V的技术博客</a>
        </li>
    
    

    
    <li class="divider"></li>
    

    
        
        
    
        <li class="chapter " data-level="1.1" data-path="../">
            
                <a href="../">
            
                    
                    博客总揽
            
                </a>
            

            
        </li>
    
        <li class="chapter active" data-level="1.2" data-path="mini.html">
            
                <a href="mini.html">
            
                    
                    spring-data-mybatis-mini极简ORM
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3" data-path="host.html">
            
                <a href="host.html">
            
                    
                    闲置主机做开发服务器
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.3.1" data-path="host/ubuntu.html">
            
                <a href="host/ubuntu.html">
            
                    
                    搭建ubuntu server及其k8s
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.2" data-path="host/frp.html">
            
                <a href="host/frp.html">
            
                    
                    使用frp代理本地机器到公网
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.3" data-path="host/gitlab-ci.html">
            
                <a href="host/gitlab-ci.html">
            
                    
                    搭建gitlab并使用CICD部署HelloWorld
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.4" data-path="idea.html">
            
                <a href="idea.html">
            
                    
                    IDEA全系列最简单的破解方式
            
                </a>
            

            
        </li>
    

    

    <li class="divider"></li>

    <li>
        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
            本书使用 GitBook 发布
        </a>
    </li>

    
    <li>
        
        
        
            
        
        
            <a href="http://www.beian.miit.gov.cn/" target="blank" class="gitbook-link">
                鲁ICP备20022988号
            </a>
        
    </li>
    
</ul>

                </nav>
            
        
    </div>

    <div class="book-body">
        
            <div class="body-inner">
                
                    

<div class="book-header" role="navigation">
    

    <!-- Title -->
    <h1>
        <i class="fa fa-circle-o-notch fa-spin"></i>
        <a href=".." >spring-data-mybatis-mini极简ORM</a>
    </h1>
</div>




                    <div class="page-wrapper" tabindex="-1" role="main">
                        <div class="page-inner">
                            
<div class="search-plus" id="book-search-results">
    <div class="search-noresults">
    
                                <section class="normal markdown-section">
                                
                                <p><a href="https://github.com/VonChange/spring-data-mybatis-mini" target="_blank">github地址</a>
<a href="https://gitee.com/vonchange/spring-data-mybatis-mini" target="_blank">gitee地址</a></p>
<p><strong>等同于spring data jdbc + mybatis 动态sql能力</strong></p>
<p><strong>大道至简 麻雀虽小 五脏俱全</strong></p>
<ol>
<li><p>抛弃繁琐的xml 只使用mybatis模版引擎即动态sql能力 sql写在markdown文件里
更容易书写和阅读 sql能统一管理查看</p>
</li>
<li><p>底层基于springJdbc 而不是mybatis 更直接纯粹</p>
</li>
<li><p>提供单表增删改(没有删除) 批量更新插入等基础方法 支持分页 多数据源 读写分离</p>
</li>
<li><p>mybatis最大优点就是sql模版引擎
我也有且仅有使用这部分功能(对于使用过mybatis的无学习成本) 但底层使用springJDBC
更简单直接 </p>
</li>
<li>简化mybatis动态sql写法(可混用-写法还是mybatis那套) 比如</li>
</ol>
<pre><code>[@and id in idList] 等于
&lt;if test=&quot;null!=idList and idList.size&gt;0&quot;&gt; and id in &lt;foreach
collection=&quot;idList&quot; index=&quot;index&quot; item=&quot;item&quot; open=&quot;(&quot; separator=&quot;,&quot;
close=&quot;)&quot;&gt;#{item}&lt;/foreach&gt;&lt;/if&gt;
</code></pre><p><img src="https://gitee.com/vonchange/spring-data-mybatis-mini/raw/master/mini.png" alt="例子">
== why not spring data jdbc,jpa,hibernate,mybaits,mybatis-plus等</p>
<ol>
<li>基于spring data jdbc理念但扩展使用mybatis动态sql能力 对于复杂点查询支持更好</li>
<li>相比jpa 底层使用hibernate(当然也能sql) 只有sql 基于spring jdbc
无jpa根据方法名(复杂点需要你学习思考,名字老长,不透明) 简单没有黑魔法 学习成本低
sql写在markdown里,纯jdbc更易于调优</li>
<li>比价mybatis 没有cache,复杂join映射实体,无resultType,resultMap配置
扩展单表CRUD 只用他的动态sql能力的模版引擎和sql放到文件管理思想 去繁就简
取其优点抛弃鸡肋功能</li>
<li>相比mybatis-plus等扩展mybatis框架 他们做的越来越像hibernate,jpa
搞Criteria那套 基本脱离mybatis优点 </li>
<li>查询只提供一个选择 就是sql写在markdown文件里 不会提供类似hibernate Criteria
多种选择说是灵活但项目多种有多种实现写法 你会有打人的冲动 </li>
<li>缓存可以用SpringCache等上层方案 </li>
<li>查询只能映射单一实体(VO,DO,DTO均可) 但现在推荐减少JOIN 推荐代码里join 后期会尝试写新的组件sqlHelper方式简化</li>
</ol>
<p>== Getting Started</p>
<ol>
<li>提供单表增删改(没有物理删除) 批量更新插入等基础方法</li>
<li>抛弃繁琐的xml 所有sql 写在markdown文件里 便于书写和阅读
默认位置sql包下repository接口名.md @ConfigLocation 可自定义位置</li>
<li>自定义更新 update/save/insert/delete 开头方法是更新操作 </li>
<li>支持分页 分页参数必须是第一个参数 </li>
<li>对于 &quot; &gt; &quot;,&quot; &lt; &quot;,&quot; &gt;= &quot;,&quot; &lt;= &quot;,&quot; &lt;&gt; &quot;无需转义(两边需有空格 我会自动替换转义)</li>
<li>提供if判断和in查询简写方式(偷懒 &gt;-&lt;)</li>
<li>注解属于spring data jpa 体系的</li>
<li>支持sql片段 [@sql XX] XX markdown文件XX名的sql片段</li>
<li>查询返回实体 不需要必须是DO 如果没特殊规范
也可直接返回VO层实体(抛弃繁琐的DO-&gt;DTO-&gt;VO 偷懒轻喷)</li>
<li>支持批量更新插入（jdbc链接参数需加入rewriteBatchedStatements=true&amp;allowMultiQueries=true）</li>
<li>分页某些特性支持mysql,oracle 主支持mysql</li>
<li>使用简单 约定大于配置 默认配置基本都满足</li>
<li>支持LocalDateTime LocalTime jdk8更方便的时间类型</li>
</ol>
<p>== 其他特性 无特殊需要可不用关心 </p>
<ol>
<li>分页 可自定义同名+Count的sql 优化分页 </li>
<li>支持读写分离 根据业务逻辑添加@ReadDataSource在方法名上 默认配置多数据源随机取
可自定义</li>
<li>多数源支持但在微服务化潮流里尽量保证同一数据源</li>
</ol>
<p>== 使用步骤基本同jpa,spring data jdbc</p>
<ol>
<li>添加依赖 </li>
<li>@EnableMybatisMini</li>
<li>extends BaseRepository<userbasedo, long=""> 或 extends
BaseQueryRepository(只查询) </userbasedo,></li>
<li>使用例子demo项目<a href="https://github.com/VonChange/spring-data-mybatis-mini-demo/blob/master/src/test/java/com/vonchange/nine/demo/dao/UserBaseRepositoryTest.java" target="_blank">spring-data-mybatis-mini-demo</a></li>
</ol>
<p> Here is a quick teaser of an application using Spring Data
Repositories in Java:</p>
<p>=== Maven configuration</p>
<p>Add the Maven dependency:</p>
<pre><code>  &lt;!-- spring boot 2.x 是使用版本2.3.4 低版本比如1.5.x 使用版本1.9.2 --&gt;
&lt;dependency&gt;
  &lt;groupId&gt;com.vonchange.common&lt;/groupId&gt;
  &lt;artifactId&gt;spring-data-mybatis-mini&lt;/artifactId&gt;
  &lt;version&gt;2.3.4&lt;/version&gt;
&lt;/dependency&gt;

&lt;dependency&gt;
       &lt;groupId&gt;org.springframework.data&lt;/groupId&gt;
       &lt;artifactId&gt;spring-data-commons&lt;/artifactId&gt;
 &lt;/dependency&gt;
 &lt;dependency&gt;
         &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
         &lt;artifactId&gt;spring-boot-starter-jdbc&lt;/artifactId&gt;
 &lt;/dependency&gt;
&lt;dependency&gt;
            &lt;groupId&gt;mysql&lt;/groupId&gt;
            &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;
            &lt;version&gt;8.0.15&lt;/version&gt;
&lt;/dependency&gt;
</code></pre><pre><code>import org.springframework.data.mybatis.mini.jdbc.repository.query.ConfigLocation;
import org.springframework.data.mybatis.mini.jdbc.repository.support.BaseRepository;
import org.springframework.data.repository.query.Param;

public interface UserBaseRepository extends BaseRepository&lt;UserBaseDO, Long&gt; {
  @ReadDataSource
  List&lt;UserBaseDO&gt; findList(@Param(&quot;userName&quot;) String userName,
                          @Param(&quot;createTime&quot;) Date createTime);
  Page&lt;UserBaseDO&gt; findList(Pageable pageable, @Param(&quot;userName&quot;) String userName,@Param(&quot;createTime&quot;) Date createTime);
  String findUserName(@Param(&quot;userName&quot;) String userName);

  List&lt;UserBaseVO&gt; findListByIds(@Param(&quot;userName&quot;) String userName,
                           @Param(&quot;createTime&quot;) Date createTime,@Param(&quot;idList&quot;)List&lt;Long&gt; idList);

  int updateIsDelete(@Param(&quot;isDelete&quot;) Integer isDelete,@Param(&quot;id&quot;) Long id);

}
</code></pre><blockquote>
<p>默认sql 包下同名吧UserBaseRepository.md 识别```开头结尾的 -- 定义的同名方法
参见<a href="https://github.com/VonChange/spring-data-mybatis-mini/blob/master/UserBaseRepository.md" target="_blank">UserBaseRepository.md</a></p>
<p>实体类 定义ID 和TABLE 名</p>
</blockquote>
<pre><code>import javax.persistence.Id;
import javax.persistence.Table;

@Data
@Table(name = &quot;user_base&quot;)
public class UserBaseDO {
    @Id
    private Long id;
    private String userName;
    private String  firstPhone;

}
</code></pre><pre><code>
@Service
public class MyService {
  @Resource
  private final UserBaseRepository userBaseRepository;

  public void doWork() {
     List&lt;UserBaseDO&gt; userBaseDOList = userBaseRepository.findList(&quot;test&quot;,new Date());
 }
}

//添加 EnableMybatisMini 注解 
@EnableMybatisMini
@SpringBootApplication 
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
</code></pre><h5 id="偷懒简化-if-test-和in查询-识别-开头"><a name="偷懒简化-if-test-和in查询-识别-开头" class="anchor-navigation-ex-anchor" href="#偷懒简化-if-test-和in查询-识别-开头"><i class="fa fa-link" aria-hidden="true"></i></a>偷懒简化 if test 和in查询 识别 [@开头</h5>
<h5 id="and-id-in-idlist-等于"><a name="and-id-in-idlist-等于" class="anchor-navigation-ex-anchor" href="#and-id-in-idlist-等于"><i class="fa fa-link" aria-hidden="true"></i></a>[@and id in idList] 等于</h5>
<pre><code>&lt;if test=&quot;null!=idList and idList.size&gt;0&quot;&gt; and id in &lt;foreach
collection=&quot;idList&quot; index=&quot;index&quot; item=&quot;item&quot; open=&quot;(&quot; separator=&quot;,&quot;
close=&quot;)&quot;&gt;#{item}&lt;/foreach&gt;&lt;/if&gt;
</code></pre><h5 id="and-username--username-等于"><a name="and-username--username-等于" class="anchor-navigation-ex-anchor" href="#and-username--username-等于"><i class="fa fa-link" aria-hidden="true"></i></a>[@and user_name &lt;&gt; userName] 等于</h5>
<pre><code>&lt;if test=&quot;null!=userName and &apos;&apos;!=userName&quot;&gt; and user_name &lt;&gt;
#{userName} &lt;/if&gt;
</code></pre><ol>
<li><p>in 查询List实体下的属性 [@and id in userList:id]</p>
</li>
<li><p>like </p>
<pre><code>[@and user_name like userName] 等于 and user_name like CONCAT(&apos;%&apos;,?,&apos;%&apos;)  
[@and user_name like userName%] 等于 and user_name like  CONCAT(?,&apos;%&apos;) 
[@and user_name like userName%] 等于 and user_name like CONCAT(&apos;%&apos;,&apos;test&apos;)
</code></pre></li>
<li><p>其他非4个分隔</p>
</li>
</ol>
<pre><code>[@and id in #{idList:in} and user_name like #{userName:like}]
等于
&lt;if test=&quot;@com.vonchange.mybatis.tpl.MyOgnl@isNotEmpty(idList) and @com.vonchange.mybatis.tpl.MyOgnl@isNotEmpty(userName) &quot;&gt; and id in &lt;foreach collection=&quot;idList&quot; index=&quot;index&quot; item=&quot;item&quot; open=&quot;(&quot; separator=&quot;,&quot; close=&quot;)&quot;&gt;#{item}&lt;/foreach&gt; and user_name like  CONCAT(&apos;%&apos;,#{userName},&apos;%&apos;)  &lt;/if&gt;

 [@AND content -&gt; &apos;$.account&apos; = #{bean.account}]
 等于
 &lt;if test=&quot;null!=bean.account and &apos;&apos;!=bean.account&quot;&gt;
 AND content -&gt; &apos;$.account&apos; = #{bean.account}
 &lt;/if&gt;
</code></pre><ol>
<li>[@sql XX] XX markdown文件XX名的sql片段</li>
</ol>
<h5 id="相关注解"><a name="相关注解" class="anchor-navigation-ex-anchor" href="#相关注解"><i class="fa fa-link" aria-hidden="true"></i></a>相关注解</h5>
<ol>
<li><p>@ColumnNot 非字段注解 </p>
</li>
<li><p>InsertIfNull UpdateIfNull 插入或者更新为空时默认值 可使用函数</p>
</li>
<li><p>UpdateNotNull updateAllField方法NULL值忽略</p>
</li>
<li><p>ReadDataSource 指定某个方法读数据源 默认配置多数据源随机取 </p>
</li>
</ol>
<pre><code> //自定义 读库数据源 不自定义默认所有你设置的数据源
    @Bean
    public ReadDataSources initReadDataSources(){
        return new ReadDataSources() {
            @Override
            public DataSource[] allReadDataSources() {
                return new DataSource[]{mainDataSource(),mainDataSource(),readDataSource()};
            }
        };
    }
</code></pre><h5 id="批量更新插入"><a name="批量更新插入" class="anchor-navigation-ex-anchor" href="#批量更新插入"><i class="fa fa-link" aria-hidden="true"></i></a>批量更新插入</h5>
<ol>
<li><p>jdbc链接参数需加入rewriteBatchedStatements=true&amp;allowMultiQueries=true</p>
</li>
<li><p>提供insertBatch(默认第一行不为NULL的字段) 可在markdown里自定义sql
无需关心List对象大小</p>
</li>
<li><p>经测试简单数据插入1万耗时1s以内</p>
</li>
<li><p>自定义实现(建议使用 更透明)</p>
</li>
</ol>
<pre><code>
  @BatchUpdate(size = 5000)
  int batchInsert(List&lt;UserBaseDO&gt; list);
</code></pre><p>只需定义单条insert 语句</p>
<pre><code>-- batchInsert
insert into user_base(`user_name`,`mobile_phone`,create_time) values
(#{userName},#{mobilePhone},#{createTime})
</code></pre><h5 id="大数据量流式读取"><a name="大数据量流式读取" class="anchor-navigation-ex-anchor" href="#大数据量流式读取"><i class="fa fa-link" aria-hidden="true"></i></a>大数据量流式读取</h5>
<ol>
<li><p>使用场景: 不用编写复杂分包逻辑,表数据大小,可关联表查 可直接 select * from 整个表
不用关心内存爆调 流的方式读取</p>
</li>
<li><p>使用例子 </p>
</li>
</ol>
<h5 id="定义方法"><a name="定义方法" class="anchor-navigation-ex-anchor" href="#定义方法"><i class="fa fa-link" aria-hidden="true"></i></a>定义方法</h5>
<pre><code>void findBigData(@Param(&quot;&quot;)AbstractPageWork&lt;UserBaseDO&gt; abstractPageWork,@Param(&quot;userName&quot;) String userName);
</code></pre><h5 id="定义sql"><a name="定义sql" class="anchor-navigation-ex-anchor" href="#定义sql"><i class="fa fa-link" aria-hidden="true"></i></a>定义sql</h5>
<pre><code>-- findBigData
select * from user_base
&lt;where&gt; 
[@and user_name like userName]
&lt;/where&gt;
</code></pre><blockquote>
<p>使用demo</p>
</blockquote>
<pre><code>
 AbstractPageWork&lt;UserBaseDO&gt; abstractPageWork = new AbstractPageWork&lt;UserBaseDO&gt;() {
            @Override
            protected void doPage(List&lt;UserBaseDO&gt; pageContentList, int pageNum, Map&lt;String, Object&gt; extData) {
                pageContentList.forEach(userBaseDO -&gt; {
                    log.info(&quot;{}&quot;,userBaseDO.toString());
                });

            }

            @Override
            protected int getPageSize() {
                return 500;
            }
        };
       userBaseRepository.findBigData(abstractPageWork,&quot;三&quot;);
       log.info(&quot;{} {} {}&quot;,abstractPageWork.getSize(),abstractPageWork.getTotalPages(),abstractPageWork.getTotalElements());
</code></pre><script type="text/javascript">var targetUl = document.getElementsByClassName('page-inner')[0].getElementsByTagName('ul')[0];if(targetUl.getElementsByTagName('a').length>0){targetUl.className='toc';}</script>

<pre><code class="lang-html">作者: 小白鼠V
链接: http://www.vonchange.com/doc/mini.html
来源: 小白鼠V技术驿站
本文原创发布于「小白鼠V技术驿站」,转载请注明出处,谢谢合作!
</code></pre>
<p><footer class="page-footer"><span class="copyright">© vonchange all right reserved，powered by Gitbook</span><span class="footer-modification">文件修订时间: 
2020-07-04 19:17:31
</span></footer></p>
<div id="gitalk-container"></div>
                                
                                </section>
                            
    </div>
    <div class="search-results">
        <div class="has-results">
            
            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
            <ul class="search-results-list"></ul>
            
        </div>
        <div class="no-results">
            
            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
            
        </div>
    </div>
</div>

                        </div>
                    </div>
                
            </div>

            
                
                <a href="../" class="navigation navigation-prev " aria-label="Previous page: 博客总揽">
                    <i class="fa fa-angle-left"></i>
                </a>
                
                
                <a href="host.html" class="navigation navigation-next " aria-label="Next page: 闲置主机做开发服务器">
                    <i class="fa fa-angle-right"></i>
                </a>
                
            
        
    </div>

    <script>
        var gitbook = gitbook || [];
        gitbook.push(function() {
            gitbook.page.hasChanged({"page":{"title":"spring-data-mybatis-mini极简ORM","level":"1.2","depth":1,"next":{"title":"闲置主机做开发服务器","level":"1.3","depth":1,"path":"doc/host.md","ref":"doc/host.md","articles":[{"title":"搭建ubuntu server及其k8s","level":"1.3.1","depth":2,"path":"doc/host/ubuntu.md","ref":"doc/host/ubuntu.md","articles":[]},{"title":"使用frp代理本地机器到公网","level":"1.3.2","depth":2,"path":"doc/host/frp.md","ref":"doc/host/frp.md","articles":[]},{"title":"搭建gitlab并使用CICD部署HelloWorld","level":"1.3.3","depth":2,"path":"doc/host/gitlab-ci.md","ref":"doc/host/gitlab-ci.md","articles":[]}]},"previous":{"title":"博客总揽","level":"1.1","depth":1,"path":"README.md","ref":"README.md","articles":[]},"dir":"ltr"},"config":{"plugins":["toc","theme-comscore","pageview-count","-lunr","-search","search-plus","splitter","-sharing","sharing-plus","expandable-chapters-small","anchor-navigation-ex","edit-link-plus","code","chart","favicon-absolute","github-buttons","advanced-emoji","rss","sitemap-general","copyright","tbfed-pagefooter","mygitalk","donate","diff","simple-mind-map","hide-element","audio_image","icp","mermaid-gb3"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"tbfed-pagefooter":{"copyright":"&copy vonchange","modify_label":"文件修订时间: ","modify_format":"YYYY-MM-DD HH:mm:ss"},"diff":{"method":"diffChars","options":{},"type":"markdown"},"splitter":{},"copyright":{"copyProtect":false,"site":"http://www.vonchange.com/","author":"小白鼠V","website":"小白鼠V技术驿站"},"toc":{"addClass":true,"className":"toc"},"edit-link-plus":{"label":"编辑本页","base":{"vonchange.github.io":"https://github.com/VonChange/VonChange.github.io/edit/master"},"defaultBase":"https://github.com/VonChange/VonChange.github.io/edit/master"},"sharing-plus":{"qq":false,"all":["facebook","google","twitter","instapaper","linkedin","pocket","stumbleupon"],"douban":false,"facebook":true,"weibo":false,"instapaper":false,"whatsapp":false,"hatenaBookmark":false,"twitter":true,"messenger":false,"line":false,"vk":false,"pocket":true,"google":false,"viber":false,"stumbleupon":false,"qzone":false,"linkedin":false},"code":{"copyButtons":true},"donate":{"alipay":"/doc/image/zfb.jpeg","alipayText":"支付宝","button":"赏","title":"","wechat":"/doc/image/wx.jpeg","wechatText":"微信"},"favicon-absolute":{"appleTouchIconMore":{},"appleTouchIconPrecomposed152":"/apple-touch-icon-precomposed-152.png","appleTouchIconPrecomposedMore":{},"favicon":"/favicon.ico"},"sitemap-general":{"prefix":"http://www.vonchange.com/"},"hide-element":{"elements":["a.gitbook-link[href='https://www.gitbook.com']"]},"fontsettings":{"theme":"white","family":"sans","size":2},"rss":{"categories":["orm","k8s","devops","java"],"title":"小白鼠V技术驿站","description":"小白鼠V技术驿站","author":"vonchange","site_url":"http://www.vonchange.com/","feed_url":"http://www.vonchange.com/rss","managingEditor":"vonchange@163.com","webMaster":"vonchange@163.com"},"audio_image":{},"highlight":{},"mermaid-gb3":{},"anchor-navigation-ex":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":true},"theme-comscore":{},"icp":{"link":"http://www.beian.miit.gov.cn/","style":{},"number":"鲁ICP备20022988号"},"pageview-count":{},"github-buttons":{"buttons":[{"user":"vonchange","repo":"vonchange.github.io","type":"star","size":"small"}]},"expandable-chapters-small":{},"mygitalk":{"flipMoveOptions":{},"clientID":"7f7363b6e6e3c9a06f4f","number":-1,"perPage":10,"proxy":"https://cors-anywhere.herokuapp.com/https://github.com/login/oauth/access_token","admin":["vonchange"],"createIssueManually":false,"distractionFreeMode":false,"repo":"vonchange.github.io","owner":"vonchange","enableHotKey":true,"clientSecret":"6e71673a0cfb622b535af4c00b0622cf2d34d31b","pagerDirection":"last","labels":["Gitalk"]},"advanced-emoji":{"embedEmojis":false},"sharing":{"qq":true,"all":["facebook","google","twitter","weibo","instapaper","linkedin","pocket","stumbleupon"],"douban":true,"facebook":false,"weibo":true,"instapaper":false,"whatsapp":false,"hatenaBookmark":false,"twitter":false,"messenger":false,"line":false,"vk":false,"pocket":false,"google":false,"viber":false,"stumbleupon":false,"qzone":true,"linkedin":false},"simple-mind-map":{"autoFit":true,"linkShape":"diagonal","preset":"colorful","style":{},"type":"markdown"},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"chart":{"type":"c3"},"search-plus":{}},"theme":"default","author":"vonchange","baidu-site-verification":"cAxqlT3C5k","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"小白鼠V技术驿站","language":"zh-hans","links":{"sidebar":{"小白鼠V的技术博客":"http://www.vonchange.com/"}},"gitbook":"3.2.3","description":"小白鼠V技术驿站"},"file":{"path":"doc/mini.md","mtime":"2020-07-04T11:17:31.963Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2021-01-10T13:01:43.103Z"},"basePath":"..","book":{"language":""}});
        });
    </script>
</div>

        
    
    <script src="../gitbook/gitbook.js"></script>
    <script src="../gitbook/theme.js"></script>
    
        
        <script src="../gitbook/gitbook-plugin-pageview-count/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-search-plus/jquery.mark.min.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-search-plus/search.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-sharing-plus/buttons.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-expandable-chapters-small/expandable-chapters-small.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-edit-link-plus/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-code/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-github-buttons/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-rss/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-copyright/plugin.js"></script>
        
    
        
        <script src="https://cdn.bootcss.com/blueimp-md5/2.12.0/js/md5.min.js"></script>
        
    
        
        <script src="/myfile/gitalk/dist/gitalk.min.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-mygitalk/mygitalk.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-donate/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-simple-mind-map/bundle.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-hide-element/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-mermaid-gb3/book/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-theme-comscore/test.js"></script>
        
    

    <script src="../gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.min.js"></script>

    </body>
</html>

